package day07;

// 描述"人"这类事物特征的类
public class Person {

	// 属性
	// 用变量表示
	// 这些变量必须通过Person类的实例才能访问
	// 这些变量称为: 实例变量

	// 姓名
	String name;
	// 性别
	char gender;
	// 年龄
	int age;

	// 行为
	// 用方法表示
	// 这些方法都是非static的
	// 且这些方法也必须通过实例才能访问
	// 这些方法称为: 实例方法

	// 吃饭
	public void eat(String food) {
		System.out.println("人吃饭, 吃了" + food);
	}

	// 工作
	public void work() {
		System.out.println("人会工作");
	}

	// 睡觉
	public void sleep() {
		System.out.println("人会睡觉");
	}

	public void sayHi() {
		// 此处访问name时, 隐式地自带"this."
		System.out.println("我叫" + name);
		System.out.println("sayHi()方法中的this: " + this);
	}

	// 构造方法
	// 方法名: 与类名一致(包括大小写)
	// 构造方法不能是静态的
	// 构造方法没有返回值, 连void关键字都没有
	// 构造方法没有return语句
	// 构造方法是可以重载的
	// 构造方法的作用: 创建并初始化对象
	public Person(String name) {
		System.out.println("Person.Person(String)");

		// 当局部变量与成员变量同名时
		// 需要进行区分: 在实例变量前加"this."
		// 即: 通过this关键字来标明实例变量
		this.name = name;
		// this关键字: 当前类属性或方法的具体调用对象的引用
	}
	// 当某个类中没有显式地声明任何构造方法时
	// java会默认为该类提供一个无参的构造方法
	// 如果类中显式地声明了构造方法
	// java就不会再提供默认构造方法
	// 此时如果需要使用无参构造方法
	// 必须显式地将无参构造声明出来

	// 建议习惯性声明无参构造
	public Person() {

	}

}
